package com.krediti.entity;

import java.math.BigDecimal;
import java.sql.Date;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.validator.NotNull;

@Entity
@Table(name = "KREDITNIZAHTEV")
public class KreditniZahtev implements java.io.Serializable {

	/**
	 * Generated serial version.
	 */
	private static final long serialVersionUID = 487537319612512557L;
	private Integer id;
	private Korisnik korisnik;
	private TipRocnosti tipRocnosti;
	private Valuta valuta;
	private Namena namena;
	private Status status;
	private Integer brojZahteva;
	private Date datumZahteva;
	private BigDecimal iznos;
	private Integer rok;
	private BigDecimal iznosUcesca;
	private BigDecimal iznosRate;

	public KreditniZahtev() {
	}

	public KreditniZahtev(Integer id, Integer brojZahteva) {
		this.id = id;
		this.brojZahteva = brojZahteva;
	}

	public KreditniZahtev(Integer id, Korisnik korisnik,
			TipRocnosti tipRocnosti, Valuta valuta, Namena namena,
			Status status, Integer brojZahteva, Date datumZahteva,
			BigDecimal iznos, Integer rok, BigDecimal iznosUcesca,
			BigDecimal iznosRate, Set<UgovorOKreditu> ugovorOKreditu) {
		this.id = id;
		this.korisnik = korisnik;
		this.tipRocnosti = tipRocnosti;
		this.valuta = valuta;
		this.namena = namena;
		this.status = status;
		this.brojZahteva = brojZahteva;
		this.datumZahteva = datumZahteva;
		this.iznos = iznos;
		this.rok = rok;
		this.iznosUcesca = iznosUcesca;
		this.iznosRate = iznosRate;
	}

	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "KREDITNIZAHTEV_SEQ")
	@SequenceGenerator(name = "KREDITNIZAHTEV_SEQ", sequenceName = "KREDITNIZAHTEV_SEQ")
	@Column(name = "ID", unique = true, nullable = false)
	@NotNull
	public Integer getId() {
		return this.id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "KORISNIKID")
	@NotNull
	public Korisnik getKorisnik() {
		return this.korisnik;
	}

	public void setKorisnik(Korisnik korisnik) {
		this.korisnik = korisnik;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "TIPROCNOSTIID")
	@NotNull
	public TipRocnosti getTipRocnosti() {
		return this.tipRocnosti;
	}

	public void setTipRocnosti(TipRocnosti tipRocnosti) {
		this.tipRocnosti = tipRocnosti;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "VALUTAID")
	@NotNull
	public Valuta getValuta() {
		return this.valuta;
	}

	public void setValuta(Valuta valuta) {
		this.valuta = valuta;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "NAMENAID")
	@NotNull
	public Namena getNamena() {
		return this.namena;
	}

	public void setNamena(Namena namena) {
		this.namena = namena;
	}

	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "STATUSID")
	@NotNull
	public Status getStatus() {
		return this.status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}

	@Column(name = "BROJZAHTEVA")
	public Integer getBrojZahteva() {
		return this.brojZahteva;
	}

	public void setBrojZahteva(Integer brojZahteva) {
		this.brojZahteva = brojZahteva;
	}

	@Column(name = "DATUMZAHTEVA")
	@NotNull
	public Date getDatumZahteva() {
		return this.datumZahteva;
	}

	public void setDatumZahteva(Date datumZahteva) {

		this.datumZahteva = datumZahteva;
	}

	@Column(name = "IZNOS", precision = 2)
	@NotNull
	public BigDecimal getIznos() {
		return this.iznos;
	}

	public void setIznos(BigDecimal iznos) {
		this.iznos = iznos;
	}

	@Column(name = "ROK")
	@NotNull
	public Integer getRok() {
		return this.rok;
	}

	public void setRok(Integer rok) {
		this.rok = rok;
	}

	@Column(name = "IZNOSUCESCA", precision = 2)
	public BigDecimal getIznosUcesca() {
		return this.iznosUcesca;
	}

	public void setIznosUcesca(BigDecimal iznosUcesca) {
		this.iznosUcesca = iznosUcesca;
	}

	@Column(name = "IZNOSRATE", precision = 2)
	@NotNull
	public BigDecimal getIznosRate() {
		return this.iznosRate;
	}

	public void setIznosRate(BigDecimal iznosRate) {
		this.iznosRate = iznosRate;
	}


}
